Neural networks are mathematics-intense methods of intelligently solving complex problems. Fuzzy control systems, in contrast, rely on expert knowledge to categorize the values of the inputs and outputs into groups and then apply if-then rules to the combinations of these input and output groups to effectively remove the math from the problem and replace it with expert knowledge. This practice discretizes the control solution space into a range of possible linguistic terms and their combinations. If we implement a search heuristic such as a Genetic Algorithm (GA) over this fuzzy solution space, we can even forgo the expert knowledge. This methodology is referred to as a GFS.
The GA is the engine of the GFS. This search algorithm methodology is based on the theory of evolution and survival of the fittest. Potential solutions are encoded in the algorithm and referred to as “chromosomes” or “strings.” Each of these chromosomes is then treated like an organism, and a population of these organisms is created. The organisms are evaluated over some “fitness” function and given a relative fitness value. “Breeding” occurs across the generation, favoring the more fit organisms, and a new generation is created. This process continues for some number of generations or until performance of the system has reached some predefined goal. For some problems, the desired, or even optimal, performance levels are known, and thus if the process reaches this level of performance, it can stop. However, most AI type problems cannot be handled in this manner, and instead some arbitrary number of generations for the run is determined as a function of both the solution space and the computational cost of running each generation.
A multitude of GA software implementations exist. Some of the more popular commercial implementations are the GA implemented in MATHWORKS' Global Optimization Toolbox for the MATLAB® programming language (mathworks.com/help/gads/index.html) and Ward Systems Group's GENEHUNTER® (wardsystems.com/genehunter.asp). Many non-commercial implementations have been written in many different languages, each with its own built-in feature set. If properly designed, GAs can be effective in solving problems that have many local optima, or values that are better than similar solutions, but not quite the optimal, or best over the whole solution space. The types of problems GAs are employed to solve typically have a very simple fitness function, but GAs can have scalability issues when the complexity of each chromosome or organism becomes quite high.